"""
函数参数的类型：
    1.位置参数 (name,age) 必须按照固定顺序
    2.关键字参数,键值(name="DJ",age=10),键是形参，值是实参。
     .可以不按照固定顺序传入
     .还可以与位置参数混用，但是位置参数必须在前面，而且跟形参位置对应
    位置参数混用，但是必须位置参数在前面。
    3.缺省参数(name,age=20)age参数默认赋值20，当没有传参数时使用默认参数
     .所有位置参数必须出现在默认参数前，包括函数定义和调用
    4.不定长参数
     .位置参数不定长 *
     .关键字参数不定长 **
"""


def user_info(name, age, gender):
    print(f"姓名：{name},年龄：{age},性别：{gender}")


# 位置参数，默认使用形式
user_info("Tom", 20, "男")

# 关键字参数
user_info(name="Tom", gender="男", age=20)

# 位置参数与关键字参数混用
user_info("Tom", gender="男", age=20)

print("-----------------------------------")


# 缺省参数(默认值)
def user_info(name, age, gender="男"):
    print(f"姓名：{name},年龄：{age},性别：{gender}")


user_info("Jack", 18)
user_info("Jack", 18, "女")


# 不定长参数 1.位置不定长 *
# 不定场参数定义的形参会作为元组存在，接收不定长数量的参数传入
def user_info(*args):
    print(f"参数的类型为：{type(args)}, 参数的内容为：{args}")


user_info(1, 2, "hello", True)


# 不定长参数 2.关键字不定长 **
# 关键字不定长参数定义的形参会作为字典存在，接收不定长数量的参数传入
def user_info(**kwargs):
    print(f"参数的类型为：{type(kwargs)}, 参数的内容为：{kwargs}")


user_info(name="DJ", age=20, gender="男")
